<?php
class Scan
{

	private $id;
	private $lien;
	private $nomSerie;			
	private $numeroTome;		
	private $nomTome;			
	private $uploader;
	private $dateUpload;
	private $resume;			
	private $type;				
	private $genre;				
	private $auteur;			
	private $valide;
	private $download;
	private $OK=false;			
	
	
	public function Create($nomSerie, $numeroTome, $nomTome, $uploader, $dateUpload, $resume, $type, $genre, $auteur,$lien ="", $valide=false, $download=0, $id='')
	{
		$this->id=DB::Secure($id);        
		$this->nomSerie=DB::Secure($nomSerie);
		$this->nomTome=DB::Secure($nomTome);
		$this->lien=DB::Secure($lien);
		$this->numeroTome=DB::Secure($numeroTome);
		$this->uploader=DB::Secure($uploader);
		$this->dateUpload=DB::Secure($dateUpload);
		$this->resume=DB::Secure($resume);		
		$this->type=DB::Secure($type);
		$this->genre=DB::Secure($genre);
		$this->auteur=DB::Secure($auteur);
		$this->valide=DB::Secure($valide);
		$this->download=DB::Secure($download);
		
		$this->OK=true; 
	}               
	
	/**
	* On vérifie la validité du scan
	* 0 : tout va bien
	* 1 : le nomserie est invalide
	* 2 : le nomtome est invalide
	* 3 : l'auteur est invalide
	* 6 : le scan existe déjà
	* 7 : le numero est invalide
	*/
	public function CheckScan($nomserie, $nomtome, $notome, $auteur, $type, $genre) {
		if(DB::ExistScan($nomserie, $nomtome, $notome) == false) {
			//$regex='#^:print:+$#';
			$regex1='#^[0-9]+$#';
			/*if(!preg_match($regex,strtr($nomserie, array(' '=>''))))
				return 1;
			if(!preg_match($regex,strtr($nomtome, array(' '=>''))))
				return 2;
			if(!preg_match($regex,$auteur))
				return 3;*/
			if(!preg_match($regex1,$notome)) // que des chiffres
				return 7;
			
		
			return 0;
		} else return 6;
	
	}

	
	// Enregistre dans la DB les attributs de l'instance de Scan en cours
	public function Save()
	{
		if((DB::ExistScan($this->nomSerie, $this->nomTome, $this->numeroTome)) AND $this->OK)
			$this->Modify();
		else if ($this->OK)
			$this->id = $this->Insert();
	}

	// Supprime un scan de la DB avec son scan_star pour éviter les erreures
	// Puis vide l'objet (destructeur)
	// Puis supprime le dossier de scan
	public function Delete()
	{
		
		//on delete la possible entrées dans scan_star pour éviter les problemes
		Scan::RemoveScanStar($this->id);
		
		$sql="DELETE FROM scan WHERE id_scan='{$this->id}'";
		DB::sql($sql);
		
		
		Scan::rrmdir($this->lien); //on supprime le dossier et ses sous dossiers
		rmdir("Scan/".$this->nomSerie); // onsupprime le dossier racine
		unset($this->id);        
		unset($this->lien);
		unset($this->nomSerie);
		unset($this->nomTome);
		unset($this->numeroTome);
		unset($this->uploader);
		unset($this->dateUpload);
		unset($this->resume);
		unset($this->type);
		unset($this->genre);
		unset($this->auteur);
		unset($this->valide);
		unset($this->download);
	}

	
	

	// Retourne l'instance du scan passé en paramètre
	public function SearchByScan($id,$joker='', $bool=1,$instance=0)
	{ 
		if($id != '') {
			$id=DB::Secure($id);
			$sql="SELECT * FROM scan WHERE id_scan=$id AND valide_scan=$bool";
		} else
			$sql="SELECT * FROM scan WHERE id_scan LIKE '$joker' AND valide_scan=$bool";
		$res=DB::sqlToArray($sql);


		if(sizeof($res) == 0) return null;
		
		if($instance == 1) {
			$tablo=new Scan();
			$tablo->Create($res[0]['nomSerie_scan'], $res[0]['numeroTome_scan'], $res[0]['nomTome_scan'], $res[0]['uploader_scan'], $res[0]['dateUpload_scan'], $res[0]['resume_scan'], $res[0]['type_scan'], $res[0]['genre_scan'], $res[0]['auteur_scan'], $res[0]['lien_scan'], $res[0]['valide_scan'], $res[0]['download_scan'], $res[0]['id_scan']);          
			return $tablo;
		}
		return $res;
	}
	
	//On cherche et retourne une instance de scan à partir des noms et du notome
	public function SearchByScan2($nomserie, $nomtome, $notome) {
		$nomserie=DB::Secure($nomserie);
		$nomtome=DB::Secure($nomtome);
		$notome=DB::Secure($notome);
		$sql="SELECT * FROM scan WHERE nomSerie_scan='$nomserie' AND nomTome_scan='$nomtome' AND numeroTome_scan=$notome";
		$res=DB::SqlToArray($sql);
		$tablo=new Scan();
		$tablo->Create($res[0]['nomSerie_scan'], $res[0]['numeroTome_scan'], $res[0]['nomTome_scan'], $res[0]['uploader_scan'], $res[0]['dateUpload_scan'], $res[0]['resume_scan'], $res[0]['type_scan'], $res[0]['genre_scan'], $res[0]['auteur_scan'], $res[0]['lien_scan'], $res[0]['valide_scan'], $res[0]['download_scan'], $res[0]['id_scan']);          
		
		return $tablo;
	}
	
	# Cherche les scan commençant par la lettre
	# Liste de tous les scan si $letter = ""
	# Retourne un array
	public function SearchByLetter($letter) {
		$letter=DB::Secure($letter);
		$sql="SELECT DISTINCT nomSerie_scan FROM scan WHERE nomSerie_scan LIKE '$letter%' AND valide_scan=1";
		$res = DB::SqlToArray($sql);
		return $res;
	}
	
	/**
	* Cherche le scan passé en paramètre
	* et retourne 0 ou 1
	*/
	
	static public function SearchByScan3($nomScan)
	{
		$res=DB::ExistScan2($nomScan);
		if($res == 0) echo 0;
		else echo 1;
	}
	
	/**
	* Cherche en fonction des elt passé en paramètre
	* type, genre, uploader
	*/
	function SearchByParameter($uploader="", $type="",$genre="", $validation=1) {
		$type=DB::Secure($type);
		$genre=DB::Secure($genre);
		$uploader=DB::Secure($uploader);
		$validation=DB::Secure($validation);
		$sql="SELECT * FROM scan WHERE type_scan LIKE '$type%' AND uploader_scan LIKE '$uploader%' AND genre_scan LIKE '$genre%' AND valide_scan=$validation";
		$res = DB::SqlToArray($sql);
		return $res;
	}
	
	# Fonction cherchant tous les scan d'un type donné
	public function SearchByType($type)
	{
		$type=DB::Secure($type);
		$sql="SELECT * FROM scan WHERE type_scan LIKE '$type%'";
		$res = DB::SqlToArray($sql);
		return $res;
	}
	
	# Fonction cherchant tous les scan d'un genre donné
	public function SearchByGenre($genre)
	{
		$genre=DB::Secure($genre);
		$sql="SELECT * FROM scan WHERE type_scan LIKE '$genre%'";
		$res = DB::SqlToArray($sql);
		return $res;
	}
	
	/**
	* Cherche tous les bd d'une série
	* utilisé dans ex6
	*/
	public function SearchBySerie($serie, $bool) {
		$serie = DB::Secure($serie);
		$bool = DB::Secure($bool);
		
		$sql="SELECT * FROM scan WHERE nomSerie_scan='$serie' AND valide_scan=$bool";
		$res = DB::SqlToArray($sql);
		$res1 = DB::Sql($sql);
		$tablo = array();
		
		
		
		for($i=0;$i<mysql_num_rows($res1);$i++) {
			$tablo[$i] = new Scan();
			$tablo[$i]->Create($res[$i]['nomSerie_scan'], $res[$i]['numeroTome_scan'], $res[$i]['nomTome_scan'], $res[$i]['uploader_scan'], $res[$i]['dateUpload_scan'], $res[$i]['resume_scan'], $res[$i]['type_scan'], $res[$i]['genre_scan'], $res[$i]['auteur_scan'], $res[$i]['lien_scan'], $res[$i]['valide_scan'], $res[$i]['download_scan'], $res[$i]['id_scan']);          
		}
		
		if(mysql_num_rows($res1) > 0)	return $tablo;
		else return null;
	}
	
	
	// Change un attribut de l'objet puis le modifie dans la table
	public function ChangeField($attribut,$nouveau=1)
	{
		if(DB::ExistScan($this->nomSerie, $this->nomTome, $this->numeroTome))
		{
			$attribut=DB::Secure($attribut);
			$nouveau=DB::Secure($nouveau);
			switch($attribut)
			{
			case "AUTEUR":
				$this->auteur=$nouveau;
				break;
			case "RESUME":
				$this->resume=$nouveau;
				break;
			case "TYPE":
				$this->type=$nouveau;
				break;
			case "GENRE":
				$this->genre=$nouveau;
				break;
			case "DOWNLOAD":
				$this->download+=$nouveau;
				break;
			case "VALIDATION":
				$this->valide=$nouveau;
				break;
			}
		}
	}

	// Retourne un des attributs de l'instance d'objet
	public function Get($attribut)
	{
		if(isset($this->$attribut)) 
			return $this->$attribut;
		else
			return false;
	}

		
	//Ajoute une BD Star
	public function AddScanStar($id_scan) {
		$id_scan = DB::Secure($id_scan);
		
		$sql="SELECT id_scan_star FROM scan_star WHERE id_scan_star=$id_scan";
		$res=DB::Sql($sql);
		if(mysql_num_rows($res) == 0) { //on ajoute le scan en star s'il n'y est pas déjà
			$sql="INSERT INTO scan_star VALUES('', $id_scan)";
			DB::Sql($sql);
		}
	}
	
	//Retire un scan des stars
	public function RemoveScanStar($id_scan) {
		$id_scan = DB::Secure($id_scan);
		$sql="DELETE FROM scan_star WHERE id_scan_star = $id_scan";
		DB::Sql($sql);
	}
	
	//Récupérer la liste des scans star
	public function GetScanStar() {
		$sql="SELECT id_scan_star FROM scan_star";
		$res=DB::SqlToArray($sql);
		if(sizeof($res) > 0)return $res;
		else return false;
	}
	
	public function ToString() {
		echo $this->id."<br />";
		echo $this->nomSerie."<br />";
		echo $this->nomTome."<br />";
		echo $this->numeroTome."<br />";
		echo $this->auteur."<br />";
		echo $this->type."<br />";
		echo $this->genre."<br />";
		echo $this->uploader."<br />";
		echo $this->download."<br />";
	}

	
	
	# -------->  FONCTIONS PRIVEES  <--------
	
		// Insertion des scan dans la DB
		private function Insert()
		{
			$sql="INSERT INTO scan VALUES('','{$this->nomSerie}','{$this->numeroTome}','{$this->nomTome}', '{$this->lien}', '{$this->uploader}', '{$this->dateUpload}', '{$this->resume}', '{$this->type}', '{$this->genre}', '{$this->auteur}', '{$this->valide}', '{$this->download}')";
			DB::sql($sql);
			return DB::Get_id();
		}

		// Modification des attributs du scan
		private function Modify()
		{
			$sql="UPDATE scan SET nomSerie_scan='{$this->nomSerie}', nomTome_scan='{$this->nomTome}', numeroTome_scan='{$this->numeroTome}', resume_scan='{$this->resume}', type_scan='{$this->type}', genre_scan='{$this->genre}', auteur_scan='{$this->auteur}', download_scan='{$this->download}', valide_scan='{$this->valide}' WHERE id_scan='{$this->id}'";
			DB::sql($sql);
		}
		
		
	private function rrmdir($dir) { 
	   if (is_dir($dir)) { 
		 $objects = scandir($dir); 
		 foreach ($objects as $object) { 
		   if ($object != "." && $object != "..") { 
			 if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object); 
		   } 
		 } 
		 reset($objects); 
		 rmdir($dir); 
	   } 
    } 

}

?>